/**
 * 时间工具类
 */

/**
 * 格式化时间戳为指定格式
 * @param timestamp 时间戳（秒或毫秒）
 * @param format 格式化字符串，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns 格式化后的时间字符串
 */
export function formatDateTime(timestamp: number | string, format: string = 'YYYY-MM-DD HH:mm:ss'): string {
  if (!timestamp) return '';
  
  // 转换为数字
  let time = Number(timestamp);
  
  // 如果时间戳是秒级，转换为毫秒级
  if (time < 10000000000) {
    time = time * 1000;
  }
  
  const date = new Date(time);
  
  // 检查日期是否有效
  if (isNaN(date.getTime())) {
    return '';
  }
  
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  
  return format
    .replace('YYYY', String(year))
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds);
}

/**
 * 格式化时间戳为日期（YYYY-MM-DD）
 * @param timestamp 时间戳
 * @returns 格式化后的日期字符串
 */
export function formatDate(timestamp: number | string): string {
  return formatDateTime(timestamp, 'YYYY-MM-DD');
}

/**
 * 格式化时间戳为时间（HH:mm:ss）
 * @param timestamp 时间戳
 * @returns 格式化后的时间字符串
 */
export function formatTime(timestamp: number | string): string {
  return formatDateTime(timestamp, 'HH:mm:ss');
}

/**
 * 格式化时间戳为日期时间（YYYY-MM-DD HH:mm）
 * @param timestamp 时间戳
 * @returns 格式化后的日期时间字符串
 */
export function formatDateTimeShort(timestamp: number | string): string {
  return formatDateTime(timestamp, 'YYYY-MM-DD HH:mm');
}

/**
 * 获取相对时间描述（如：刚刚、5分钟前、1小时前等）
 * @param timestamp 时间戳
 * @returns 相对时间描述
 */
export function getRelativeTime(timestamp: number | string): string {
  if (!timestamp) return '';
  
  let time = Number(timestamp);
  if (time < 10000000000) {
    time = time * 1000;
  }
  
  const now = Date.now();
  const diff = now - time;
  
  const minute = 60 * 1000;
  const hour = 60 * minute;
  const day = 24 * hour;
  const month = 30 * day;
  const year = 365 * day;
  
  if (diff < minute) {
    return '刚刚';
  } else if (diff < hour) {
    return `${Math.floor(diff / minute)}分钟前`;
  } else if (diff < day) {
    return `${Math.floor(diff / hour)}小时前`;
  } else if (diff < month) {
    return `${Math.floor(diff / day)}天前`;
  } else if (diff < year) {
    return `${Math.floor(diff / month)}个月前`;
  } else {
    return `${Math.floor(diff / year)}年前`;
  }
}